home *** CD-ROM | disk | FTP | other *** search
/ Adobe Graphics & Publishing SDK 1996 December / Adobe Graphics & Publishing SDK 1996 December.iso / mac / After Effects 3.1 SDK Mac / Examples / UI Samples / Custom UI in comp⁄layer / AEFX_SampleM.c < prev    next >
Encoding:
C/C++ Source or Header  |  1996-06-04  |  2.9 KB  |  136 lines  |  [TEXT/CWIE]

  1. /**
  2.     AEFX_SampleM.c
  3.     
  4.     Part of the Adobe After Effects 3.1 SDK    
  5.     Copyright (c)1993-96, Adobe Systems Inc, All Rights Reserved.
  6.     
  7.     A simple After Effects plug-in with a custom user interface demonstrating
  8.     the use of PF_Cmd_Event.  Matrix and transform operations are performed here.
  9.  
  10.     Revision History
  11.         1.0, created by dmw
  12. **/
  13.  
  14. #include "AEFX_Sample.h"
  15.  
  16.  
  17. PF_Err SAM_SetIdentityMatrix (PF_FloatMatrix *matrix)
  18. {
  19.     matrix->mat[0][0] = matrix->mat[1][1] = 
  20.     matrix->mat[2][2] = 1;    
  21.     
  22.     matrix->mat[0][1] = matrix->mat[0][2] =
  23.     matrix->mat[1][0] = matrix->mat[1][2] =
  24.     matrix->mat[2][0] = matrix->mat[2][1] = 0;
  25.     
  26.     return PF_Err_NONE;
  27. }
  28.  
  29.  
  30. PF_Err SAM_ScaleMatrix (    
  31.                     PF_FloatMatrix *m,    /* <> */
  32.                     PF_FpLong scaleX,        /* >> */
  33.                     PF_FpLong scaleY,        /* >> */
  34.                     PF_FpLong aboutX,        /* >> */
  35.                     PF_FpLong aboutY )        /* >> */
  36. {
  37.     PF_FloatMatrix    scale;
  38.     PF_Err            err = PF_Err_NONE;
  39.     
  40.     if (scaleX != 1.0 || scaleY != 1.0) {
  41.     
  42.         scale.mat[0][0] = scaleX;     scale.mat[0][1] = 0;             scale.mat[0][2] = 0;
  43.         scale.mat[1][0] = 0;        scale.mat[1][1] = scaleY;        scale.mat[1][2] = 0;
  44.     
  45.         scale.mat[2][0] = (1.0 - scaleX) * (aboutX);
  46.         scale.mat[2][1] = (1.0 - scaleY) * (aboutY);
  47.         scale.mat[2][2] = 1;    
  48.     
  49.         err = SAM_ConcatMatrix(&scale, m);
  50.     
  51.     }
  52.     
  53.     return err;
  54. }
  55.  
  56.  
  57. PF_Err SAM_RotateMatrixPlus (    
  58.                         PF_FloatMatrix *m,                /* <> */
  59.                         PF_InData    *in_data,            /* >> */
  60.                         PF_FpLong degrees,                /* >> */
  61.                         PF_FpLong aboutX,                /* >> */
  62.                         PF_FpLong aboutY )                /* >> */
  63. {
  64.     PF_FloatMatrix    rotate;
  65.     PF_FpLong        radians, s, c;
  66.     PF_Err            err = PF_Err_NONE;
  67.     
  68.     if (degrees) {
  69.         radians =  PF_RAD_PER_DEGREE * degrees;
  70.         s = PF_SIN(radians);
  71.         c = PF_COS(radians);
  72.     
  73.         rotate.mat[0][0] = c; rotate.mat[0][1] = s; rotate.mat[0][2] = 0;
  74.         rotate.mat[1][0] =-s; rotate.mat[1][1] = c; rotate.mat[1][2] = 0;
  75.         
  76.         rotate.mat[2][0] = (aboutX * (1.0 - c) + aboutY * s);    
  77.         rotate.mat[2][1] = (aboutY * (1.0 - c) - aboutX * s);
  78.     
  79.         rotate.mat[2][2] = 1;
  80.         
  81.         err = (SAM_ConcatMatrix(&rotate, m));
  82.     }
  83.     
  84.     return err;
  85. }
  86.  
  87.  
  88. PF_Err SAM_ConcatMatrix (
  89.                     const PF_FloatMatrix *src,        /* >> */
  90.                     PF_FloatMatrix *dst )            /* <> */
  91. {
  92.     PF_FloatMatrix    tmp;
  93.        register         long i, j;
  94.      PF_FpLong        temp;
  95.  
  96.        for (i = 0; i < 3; i++) {
  97.            for (j = 0; j < 3; j++) {
  98.              temp =    dst->mat[i][0] * src->mat[0][j] +
  99.                       dst->mat[i][1] * src->mat[1][j] +
  100.                     dst->mat[i][2] * src->mat[2][j];
  101.                     
  102.               tmp.mat[i][j] = temp;
  103.     
  104.         }
  105.     }
  106.     
  107.     *dst = tmp;
  108.     
  109.     return PF_Err_NONE;
  110. }
  111.  
  112.  
  113. PF_Err SAM_TransformFixPoints (
  114.                         const PF_FloatMatrix *m,    /* >> */
  115.                         long count,                    /* >> */
  116.                         PF_FixedPoint *pts )        /* <> */
  117. {
  118.     long                 i;
  119.     PF_FixedPoint        temp;
  120.     PF_FpLong            d;
  121.     PF_Err                err = PF_Err_NONE;
  122.  
  123.     for (i=0; i<count; i++) {
  124.     
  125.         temp = pts[i];
  126.         
  127.         d = temp.x * m->mat[0][0] + temp.y * m->mat[1][0] + 65536.0 * m->mat[2][0];
  128.         pts[i].x = (long)(d);
  129.         
  130.         d =    temp.x * m->mat[0][1] + temp.y * m->mat[1][1] +  65536.0 * m->mat[2][1];
  131.         pts[i].y = (long)(d);
  132.     }
  133.  
  134.     return err;
  135. }
  136.